package com.jrx.anytxn.customer.mapper.ext;


import com.jrx.anytxn.common.annotation.EnableHistoryLogAnnotation;
import com.jrx.anytxn.customer.entity.CmCustomerFirstLevel;
import com.jrx.anytxn.customer.mapper.base.CmCustomerFirstLevelMapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 添加客户一级表自定义mapper
 * @author Qingyao Xing
 * @date 2019/9/27 15:05
 */
public interface ExtCmCustomerFirstLevelMapper extends CmCustomerFirstLevelMapper {

    /**
     *   根据客户id查询客户一级信息记录数量
     * @param customerId 客户id
     * @param tenantId  租户id
     * @return int 客户数量
     * @author Qingyao Xing
     * @date 2019/9/27 15:05
     */
    int selectByFirstLevelCount(@Param("customerId") String customerId, @Param("tenantId") String tenantId);
 /**
  *  获取客户以i级表集合
  *  @param cond 客户一级表查询条件数据对象
  * @return java.util.List<com.jrx.anytxn.customer.entity.CmCustomerFirstLevel> 客户一级表查询结果集合
  * @author Qingyao Xing
  * @date 2019/9/27 15:05
  */
    List<CmCustomerFirstLevel> selectByCondition(CmCustomerFirstLevel cond);

    /**
     * 根据组织号，证件类型，证件号码查询客户一级信息
     * @param idNumber 证件号码
     * @param idType 证件类型
     * @param organizationId 机构号
     * @param tenantId  租户id
     * @param customerId  客户id
     * @return com.jrx.anytxn.customer.entity.CmCustomerFirstLevel 客户一级表信息
     * @author Qingyao Xing
     * @date 2019/8/8 10:16
     */
    CmCustomerFirstLevel selectFirstLevelByOrgIdAndId(@Param("idNumber") String idNumber, @Param("idType") String idType,@Param("organizationId") String organizationId,@Param("tenantId") String tenantId,@Param("customerId") String customerId);

    /**
     * 根据客户id和机构号查询客户一级信息
     * @param customerId 客户id
     * @param organizationId 机构号
     * @param tenantId  租户id
     * @return com.jrx.anytxn.customer.entity.CmCustomerFirstLevel 客户一级表信息
     * @author Qingyao Xing
     * @date 2019/8/8 10:19
     */
    CmCustomerFirstLevel selectFirstLevelByOrgIdAndCusId(@Param("customerId") String customerId,@Param("organizationId") String organizationId, @Param("tenantId") String tenantId);

    /**
     * 根据客户id和机构号查询客户一级信息
     * @param customerId 客户id
     * @param organizationId 机构号
     * @param tenantId  租户id
     * @return com.jrx.anytxn.customer.entity.CmCustomerFirstLevel 客户一级表信息
     * @author Qingyao Xing
     * @date 2019/8/8 10:19
     */
    CmCustomerFirstLevel selectFirstLevelByOrgIdAndCusIdUnionAll(@Param("customerId") String customerId,@Param("organizationId") String organizationId, @Param("tenantId") String tenantId);


    /**
     * 根据主键、客户id、租户id修改客户一级信息
     *
     * @param cmCustomerFirstLevel 客户一级信息
     * @return 生效个数
     */
    @EnableHistoryLogAnnotation
    int updateByIdAndCustomerIdAndTenantId(CmCustomerFirstLevel cmCustomerFirstLevel);

    /**
     * 根据 租户id 和客户id集合查询客户一级表
     * @param tenantId 租户id
     * @param customerIdList 客户id集合
     * @return
     */
    List<CmCustomerFirstLevel> selectFirstLevelByTentanIdAndCusIds(@Param("tenantId") String tenantId, @Param("customerIdList") List<String> customerIdList);

    /**
     *  根据租户id和证件号模糊查询客户一级表信息
     * @param tenantId
     * @param idNumber
     * @return
     */
    List<CmCustomerFirstLevel>  selectFirstLevelByTentanIdAndIdNumber(@Param("tenantId") String tenantId,@Param("idNumber") String idNumber,@Param("name") String name,@Param("customerId") String customerId);


    CmCustomerFirstLevel selectByIdAndCustomerId(@Param("id") Long id,
                                                 @Param("tenantId") String tenantId,
                                                 @Param("customerId") String customerId);

    /**
     * 根据身份证，租户查询客户一级信息
     * @param idNumber
     * @param tenantId
     * @return
     */
    CmCustomerFirstLevel selectByIdNumberAndTenantId(@Param("idNumber") String idNumber,
                                                @Param("tenantId") String tenantId);

    List<CmCustomerFirstLevel> selectAllCust();


    void batchUpdateFirstLevelForBatch(List<CmCustomerFirstLevel> customerFirstLevelList);

   /**
    * 统计客户一级信息的数量
    *
    * @return intselectAllCust
    */
   int selectCountForBatch();

   List<CmCustomerFirstLevel> selectAllByCreateTime(@Param("startTime") String startTime);

    void batchInsert(List<CmCustomerFirstLevel> list);

    /**
     * 查询最大的客户id
     *
     * @return Long
     */
    Long selectMaxCustId();

    /**
     * 获取创建日期大于指定时间的一级客户集合
     * @param limitTime
     * @return
     */
    List<CmCustomerFirstLevel> selectByCreateTimeGreaterThanEquals(@Param("limitTime") String limitTime);

    /**
     * 查询身份证即将过期的用户
     * @param tenantId
     * @param idExpireDate
     * @return
     */
    List<CmCustomerFirstLevel> selectIdCardOverdue(@Param("tenantId") String tenantId, @Param("idExpireDate") String idExpireDate);

}